/**
 * Created by zhouli on 2019/1/27.
 * 用户进入应用的时候，通过接口获取该用户需要显示的菜单 selfMenu
 * 然后与配置在前端的的菜单 allMenu 进行比对
 * 得到一个用户菜单
 * 用户的菜单控制不通过 functionProfile
 */

/*
* 注意：如果在开发阶段，菜单需要显示，但是后端数据库里面并没有，
* todo
* 需要写一个逻辑，在 dev 或者 uat 阶段，菜单都显示出来
* */
import {deepFullCopy} from "share/common";
import configureStore from "stores";
function getMenu(options) {
  let selfMenu = deepFullCopy(options.userPermission);
  let allMenu = deepFullCopy(options.menu);
  let user = options.user;
  let menu = configureStore.store.getState().login.userPermissionAllMenus;
  if(user.enableNewPermission){
    console.log("新权限菜单控制：");
    //只对某些租户进行控制
    let _selfMenu = menu || [];
    let level1 = getFristLevelMenu(allMenu, _selfMenu);
    level1 = getSubmenu(level1, _selfMenu);
    return level1;
  }else {
    console.log("老权限菜单控制：");
    return allMenu
  }
}

//过滤菜单，有些一级菜单没有子菜单就过滤掉
function filterOneMenu(arr) {
  if(arr && arr.length){
    let list = [];
    for(let i=0;i<arr.length;i++){
      if(arr[i].subMenu || arr[i].url){
        list.push(arr[i])
      }
    }
    return list;
  }else {
    return arr;
  }
}

//返回显示的第二级菜单
function getSubmenu(level1, selfMenu) {
  level1 = level1.map(item => {
    if (item.subMenu && item.subMenu.length && item.subMenu.length > 0) {
      let res = getFristLevelMenu(item.subMenu, selfMenu);
      if (res.length > 0) {
        item.subMenu = res;
      } else {
        item.subMenu = undefined;
      }
    }
    return item;
  });
  let resMenu = filterOneMenu(level1);
  return resMenu;
}

//返回可以显示的第一级菜单
function getFristLevelMenu(allMenu, selfMenu) {
  let res = [];
  allMenu.map(item => {
    if (isHasKey(item.key, selfMenu)) {
      res.push(item);
    }
  });
  return res;

  //检测 key 是否在可以显示的菜单里面
  function isHasKey(key, selfMenu) {
    for (let i = 0; i < selfMenu.length; i++) {
      if (key === selfMenu[i].key) {
        return true;
      }
    }
    return false;
  }
}

export default {
  getMenu
};
